package cn.oracle.eshop.Inventory.command;

import cn.oracle.eshop.Inventory.dao.GoodsStockDAO;
import cn.oracle.eshop.Inventory.domain.GoodsStockDO;
import cn.oracle.eshop.comment.util.DateProvider;
import cn.oracle.eshop.wms.domain.ReturnGoodsInputOrderItemDTO;

import java.util.List;
import java.util.Map;

/**退货入库
 * @author wyh
 * @ClassName ReturnGoodsInputStockUpdateCommand
 * @date 2022/3/30 /21:44
 */

public class ReturnGoodsInputStockUpdateCommand extends AbstractGoodsStockUpdaterCommand{
    //AbstractGoodsStockUpdateCommand
    /**
     * 退货入库单条目DTO集合
     */
    private Map<Long, ReturnGoodsInputOrderItemDTO> returnGoodsInputOrderItemDTOMap;

    /**
     * 构造函数
     * @param goodsStockDOs 商品库存DO集合
     * @param goodsStockDAO 商品库存管理模块的DAO组件
     * @param dateProvider 日期辅助组件
     * @param returnGoodsInputOrderItemDTOMap 退货入库单条目DTO集合
     */

    public ReturnGoodsInputStockUpdateCommand(List<GoodsStockDO> goodsStockDOs, GoodsStockDAO goodsStockDAO, DateProvider dateProvider
    ,	Map<Long, ReturnGoodsInputOrderItemDTO> returnGoodsInputOrderItemDTOMap) {
        super(goodsStockDOs, goodsStockDAO, dateProvider);
        this.returnGoodsInputOrderItemDTOMap=returnGoodsInputOrderItemDTOMap;
    }


    /**
     * 更新销售库存
     */
    @Override
    protected void updateSaleStockQuantity() {
        for(GoodsStockDO goodsStockDO : goodsStockDOs) {
            ReturnGoodsInputOrderItemDTO returnGoodsInputOrderItemDTO =
                    returnGoodsInputOrderItemDTOMap.get(goodsStockDO.getId());
            goodsStockDO.setSaleStockQuantity(goodsStockDO.getSaleStockQuantity()
                    + returnGoodsInputOrderItemDTO.getArrivalCount());
        }
    }
    /**
     * 更新锁定库存
     */
    @Override
    protected void updateLockedStockQuantity() {

    }
    /**
     * 更新已销售库存
     */
    @Override
    protected void updateSaledStockQuantity() {
        for(GoodsStockDO goodsStockDO : goodsStockDOs) {
            ReturnGoodsInputOrderItemDTO returnGoodsInputOrderItemDTO =
                    returnGoodsInputOrderItemDTOMap.get(goodsStockDO.getId());
            goodsStockDO.setSaleStockQuantity(goodsStockDO.getSaleStockQuantity()
                    - returnGoodsInputOrderItemDTO.getArrivalCount());
        }
    }
}
